// Myself.h

// Predstavuje hraca seba sameho

#ifndef MYSELF_H
#define MYSELF_H

#include "Player/World/Player.h"
#include "Common/World/Point.h"
#include "Common/World/Angle.h"
#include "Common/World/Vector.h"


class Myself : public Player
{
	// Posledna pozicia a cas, kedy sme skutocne nieco videli
	Point lastSeenPos;
	int lastSeenTime;
	int seeCount;

public:
	
	// 
	float effort;
	// Energia hraca
	float stamina;

	// Ma hrac hned poslat TurnNeck prikaz na server? Toto sluzi na synchronizaciu s VI
	bool bSendTurnNeckTo;
	bool bNeckSynchronization;

	ViewWidth vwidth;

	// Konstruktor
	Myself(World* w);
	// Kopirovaci konstruktor
	Myself(const Myself&);
	// Destruktor
	virtual ~Myself();
	// Operator priradenia
	virtual Myself& operator =(const Myself&);

	// METODY

	//
	virtual int GetAge() const
	{ 
		return 0;
	}
	virtual void SetAge(unsigned)
	{
	
	}
	//
	float GetEffort() const 
	{ 
		return effort; 
	}
	//
	void SetEffort(float e) 
	{ 
		effort = e; 
	}
	// Vrati stranu, na ktorej hra tento (nas) hrac
	virtual Side GetSide() const
	{ 
		return OUR; 
	}
	// Nastavi stranu hraca
	virtual void SetSide(Side s)
	{
		side = s;
	}
	// Vrati uroven energie hraca
	float GetStamina() const 
	{ 
		return stamina; 
	}
	// Nastavi uroven energie hraca
	void SetStamina(float s) 
	{ 
		stamina = s; 
	}
	// Vrati mod videnia
	ViewWidth GetViewWidth() const 
	{ 
		return vwidth; 
	}
	// Nastavi mod videnia
	void SetViewWidth(ViewWidth w) 
	{ 
		vwidth = w; 
	}

	// Vrati posledne videnu poziciu
	Point GetLastSeenPos() const
	{ 
		return lastSeenPos;
	}
	// Vrati cas, kedy nieco naposledy videl
	int GetLastSeenTime() const
	{
		return lastSeenTime;
	}
	//
	int GetSeeCount() const
	{ 
		return seeCount; 
	}

	// Pozera hrac na tento bod?
	bool IsLookingAt(Point point) const;

	// Vypocita absolutnu poziciu, smer a rychlost z videnych ciar a vlajok
	bool Recalculate(const SENSE_BODY* sb, const VISUAL_INFO* vi);

	// Resetuje na maximum staminu
	inline void ResetStamina();
	// Resetuje na maximum usilie
	inline void ResetEffort();
	
	// Ulozi lastSeenPos a lastSeenTime
	inline void SaveLastSeenData();
	
	// Predpoveda svoj stav v nasledujucom kroku
	void Step();



};

//#include "Player/World/World.h"

// Resetuje na maximum staminu
void Myself::ResetStamina()
{
	stamina = world->params->server->stamina_max;
}

// Resetuje na maximum usilie
void Myself::ResetEffort()
{
	effort = type->effort_max;
}

// Ulozi poziciu a simulacny cas, kedy sme skutocne nieco videli
void Myself::SaveLastSeenData()
{
	lastSeenPos = pos;
	lastSeenTime = world->state->GetSimTime();
	seeCount++;
}

#endif // MYSELF_H
